﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace GestorDeFlotasDesktop.AbmChofer
{
    public partial class AbmChofer : Form
    {
        private int selected_elem = -1;
        public AbmChofer(Modelo.FormActions.Actions action, string id)
        {
            InitializeComponent();
            pk.Visible = false;
            lbl_estado.Text = "ALTA";
            tb_grande.Visible = false;

            if (action == Modelo.FormActions.Actions.Modificacion || action == Modelo.FormActions.Actions.Baja)
            {
                selected_elem = Convert.ToInt32(id);
                lbl_estado.Text = "MODIFICACION";

                using (SqlConnection con = Modelo.Modelo.createConnection())
                {
                    SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM NUNCA_TAXI.Choferes WHERE Id_Chofer = " + id, con);

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    //Ch_Nombre,Ch_Apellido,Ch_Dni,Ch_Direccion,Ch_Telefono,Ch_Mail,Ch_Fecha_Nac,Ch_Habilitado
                    pk.Name = id;

                    tb_nombre.Text = dt.Rows[0]["Ch_Nombre"].ToString();
                    tb_apellido.Text = dt.Rows[0]["Ch_Apellido"].ToString();
                    tb_dni.Text = dt.Rows[0]["Ch_Dni"].ToString();
                    tb_grande.Text = dt.Rows[0]["Ch_Direccion"].ToString();
                    tb_tel.Text = dt.Rows[0]["Ch_Telefono"].ToString();
                    tb_mail.Text = dt.Rows[0]["Ch_Mail"].ToString();
                    dt_nacimiento.Value = DateTime.Parse(dt.Rows[0]["Ch_Fecha_Nac"].ToString());

                    label7.Visible = label8.Visible = label9.Visible = label11.Visible = false;
                    tb_dpto.Visible = tb_localidad.Visible = tb_nropiso.Visible = tb_cp.Visible = false;
                    tb_grande.Visible = true;

                    if (Convert.ToBoolean(dt.Rows[0]["Ch_Habilitado"].ToString()) == false)
                    {
                        cb_habi.Checked = false;
                    }
                    else
                    {
                        cb_habi.Checked = true;
                    }

                    if (action == Modelo.FormActions.Actions.Baja)
                    {
                        lbl_estado.Text = "BAJA";
                        Propiedades.Enabled = false;
                    }

                    try
                    {
                        Modelo.Modelo.openConnection(con);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Modelo.Modelo.closeConnection(con);
                    }
                }
            }
        }

        private void AbmChofer_Load(object sender, EventArgs e)
        {

        }

        private void aceptar_Click(object sender, EventArgs e)
        {
            if (lbl_estado.Text == "ALTA")
            {
                bool valido = true;
                string error_txt = "ERROR: ";
                if (String.IsNullOrEmpty(tb_nombre.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Nombre de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_apellido.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Apellido de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_dni.Text))
                {
                    error_txt = String.Concat(error_txt, "\n DNI de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_tel.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Telefono de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_dir.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Direccion de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_cp.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Codigo Postal de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(dt_nacimiento.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Fecha de Nacimiento de cliente es obligatorio");
                    valido = false;
                }
                if (valido)
                {
                    using (SqlConnection con_un = Modelo.Modelo.createConnection())
                    {
                        try
                        {
                            Modelo.Modelo.openConnection(con_un);
                            SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getChoferByTel(tb_tel.Text), con_un);
                            SqlDataReader reader = comando_check_unique.ExecuteReader();
                            bool found = false;
                            while (reader.Read())
                            {
                                if (!reader[0].ToString().Equals(selected_elem.ToString()))
                                {
                                    found = true;
                                    break;
                                }
                            }
                            if (found)
                            {
                                MessageBox.Show("Chofer duplicado. Ya existe otro con igual telefono");
                            }
                            else
                            {
                                using (SqlConnection con = Modelo.Modelo.createConnection())
                                {
                                    SqlCommand comando = new SqlCommand("INSERT INTO NUNCA_TAXI.Choferes(Ch_Nombre,Ch_Apellido,Ch_Dni,Ch_Direccion,Ch_Telefono,Ch_Mail,Ch_Fecha_Nac,Ch_Habilitado) VALUES(@nom,@ape,@dni,@dire,@tel,@mail,@fech,@habi)", con);
                                    comando.Parameters.AddWithValue("nom", tb_nombre.Text);
                                    comando.Parameters.AddWithValue("ape", tb_apellido.Text);
                                    comando.Parameters.AddWithValue("dni", tb_dni.Text);
                                    comando.Parameters.AddWithValue("dire", tb_dir.Text + " - " + tb_nropiso.Text + " " + tb_dpto.Text + " - " + "(" + tb_localidad.Text + ") (" + tb_cp.Text + ")");
                                    comando.Parameters.AddWithValue("tel", tb_tel.Text);
                                    comando.Parameters.AddWithValue("mail", tb_mail.Text);
                                    comando.Parameters.AddWithValue("fech", dt_nacimiento.Value);
                                    if (cb_habi.Checked == true)
                                    {
                                        comando.Parameters.AddWithValue("habi", 1);
                                    }
                                    else if (cb_habi.Checked == false)
                                    {
                                        comando.Parameters.AddWithValue("habi", 0);
                                    }

                                    try
                                    {
                                        Modelo.Modelo.openConnection(con);
                                        comando.ExecuteNonQuery();
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                    finally
                                    {
                                        tb_nombre.Text = "";
                                        tb_apellido.Text = "";
                                        tb_dni.Text = "";
                                        tb_dir.Text = "";
                                        tb_tel.Text = "";
                                        tb_mail.Text = "";
                                        tb_dpto.Text = "";
                                        tb_nropiso.Text = "";
                                        tb_localidad.Text = "";
                                        tb_cp.Text = "";
                                        cb_habi.Checked = false;
                                        dt_nacimiento.Value = System.DateTime.Now;
                                        Modelo.Modelo.closeConnection(con);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
                else
                {
                    MessageBox.Show(error_txt);
                }
            }
            if (lbl_estado.Text == "MODIFICACION")
            {
                bool valido = true;
                string error_txt = "ERROR: ";
                if (String.IsNullOrEmpty(tb_nombre.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Nombre de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_apellido.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Apellido de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_dni.Text))
                {
                    error_txt = String.Concat(error_txt, "\n DNI de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_tel.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Telefono de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(tb_grande.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Direccion de cliente es obligatorio");
                    valido = false;
                }
                if (String.IsNullOrEmpty(dt_nacimiento.Text))
                {
                    error_txt = String.Concat(error_txt, "\n Fecha de Nacimiento de cliente es obligatorio");
                    valido = false;
                }
                if (valido)
                {
                    using (SqlConnection con_un = Modelo.Modelo.createConnection())
                    {
                        try
                        {
                            Modelo.Modelo.openConnection(con_un);
                            SqlCommand comando_check_unique = new SqlCommand(Modelo.SqlQueries.getChoferByTel(tb_tel.Text), con_un);
                            SqlDataReader reader = comando_check_unique.ExecuteReader();
                            bool found = false;
                            while (reader.Read())
                            {
                                if (!reader[0].ToString().Equals(selected_elem.ToString()))
                                {
                                    found = true;
                                    break;
                                }
                            }
                            if (found)
                            {
                                MessageBox.Show("Chofer duplicado. Ya existe otro con igual telefono");
                            }
                            else
                            {
                                using (SqlConnection con = Modelo.Modelo.createConnection())
                                {
                                    SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Choferes SET Ch_Nombre=@nom,Ch_Apellido=@ape,Ch_Dni=@dni,Ch_Direccion=@dire,Ch_Telefono=@tel,Ch_Mail=@mail,Ch_Fecha_Nac=@fech,Ch_Habilitado=@habi WHERE Id_Chofer = '" + pk.Name + "'", con);
                                    comando.Parameters.AddWithValue("nom", tb_nombre.Text);
                                    comando.Parameters.AddWithValue("ape", tb_apellido.Text);
                                    comando.Parameters.AddWithValue("dni", Convert.ToDecimal(tb_dni.Text));
                                    comando.Parameters.AddWithValue("dire", tb_grande.Text);
                                    comando.Parameters.AddWithValue("tel", Convert.ToDecimal(tb_tel.Text));
                                    comando.Parameters.AddWithValue("mail", tb_mail.Text);
                                    comando.Parameters.AddWithValue("fech", dt_nacimiento.Value);
                                    if (cb_habi.Checked == true)
                                    {
                                        comando.Parameters.AddWithValue("habi", 1);
                                    }
                                    else if (cb_habi.Checked == false)
                                    {
                                        comando.Parameters.AddWithValue("habi", 0);
                                    }

                                    try
                                    {
                                        Modelo.Modelo.openConnection(con);
                                        comando.ExecuteNonQuery();
                                    }
                                    catch (Exception ex)
                                    {
                                        MessageBox.Show(ex.Message);
                                    }
                                    finally
                                    {
                                        Modelo.Modelo.closeConnection(con);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                }
                else
                {
                    MessageBox.Show(error_txt);
                }
            }
            if (lbl_estado.Text == "BAJA")
            {
                using (SqlConnection con = Modelo.Modelo.createConnection())
                {
                    SqlCommand comando = new SqlCommand("UPDATE NUNCA_TAXI.Choferes SET Ch_Habilitado=@habi WHERE Id_Chofer = '" + pk.Name + "'", con);
                    comando.Parameters.AddWithValue("habi", 0);
                    try
                    {
                        Modelo.Modelo.openConnection(con);
                        comando.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        Modelo.Modelo.closeConnection(con);
                    }
                }
            }
                            
        }
    }
}
